package com.tfswx.jcyw.sqlmodel.api;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.tfswx.jcyw.sqlmodel.api.bean.Node;
import com.tfswx.jcyw.sqlmodel.api.bean.jdpz.Jdxx;
import com.tfswx.jcyw.sqlmodel.api.bean.table.Alias;
import com.tfswx.jcyw.sqlmodel.api.bean.table.Select;

import java.util.List;

/**
 * @author 张述江
 * @date 2023/9/7
 */
public interface Operator {

    // 数据关联
    // 数据合并
    // 数据过滤
    // 数据排序
    // 数据去重
    // 分组聚合
    // 列拆分
    // 列合并
    // 类型转换
    // 扩展字段
    // 字符拼接
    // 大小写转换
    // 字段截取
    // 空值填充
    // 空格去除
    // 字符串替换
    // 日期运算
    // SQL编辑器

    String getName();

    Select operate(Node node, List<Select> pResultList);


    default Select invoke(Node node, List<Select> pResultList, OperatorChain chain) {
        if (getName().equals(node.getJdlx())) {
            Select select = operate(node, pResultList);
            if (select != null) {
                JSONObject jsonObject = JSON.parseObject(node.getJdpz());
                Jdxx jdxx = jsonObject.getJSONObject("jdxx").toJavaObject(Jdxx.class);
                select.setAlias(new Alias(jdxx.getBm()));
            }
            return select;
        } else {
            return chain.invoke(node, pResultList);
        }
    }
}
